//////////////////////////////
// Legacy Clearfix
//
// For when you need full Legacy support, including old IE and old Firefox
//
// From http://www.css-101.org/articles/clearfix/latest-new-clearfix-so-far.php
//////////////////////////////
%clearfix-legacy {
  /* for IE 6/7 */
  *zoom: expression(this.runtimeStyle.zoom="1", this.appendChild(document.createElement("br")).style.cssText="clear:both;font:0/0 serif");
  /* non-JS fallback */
  *zoom: 1;

  &:before,
  &:after {
    content: ".";
    display: block;
    height: 0;
    overflow: hidden;
  }
  
  &:after {
    clear: both;
  }
}

//////////////////////////////
// Micro Clearfix
//
// For when you need old IE support, but not concerned with old Firefox
// From http://nicolasgallagher.com/better-float-containment-in-ie/
//////////////////////////////
%clearfix-micro {
  /* for IE 6/7 */
  *zoom: expression(this.runtimeStyle.zoom="1", this.appendChild(document.createElement("br")).style.cssText="clear:both;font:0/0 serif");
  /* non-JS fallback */
  *zoom: 1;

  &:before,
  &:after {
    content: "";
    display: table;
  }
  
  &:after {
    clear: both;
  }
}

//////////////////////////////
// Modern Clearfix
//
// Clearfix for modern browsers, especiall when using border-box
//
// From http://www.css-101.org/articles/clearfix/latest-new-clearfix-so-far.php
//////////////////////////////
%clearfix:after {
  content: "";
  display: table;
  clear: both;
}

//////////////////////////////
// Massive Clearfix Mixin
//
// Clearfix mixin for all of your clearfixing needs. Will choose the right mixin for you.
// Can choose whether to extend or to write.
//////////////////////////////
$clearfix-extend: false !default;
$legacy-support-for-mozilla: true !default;

@mixin clearfix($extend: $clearfix-extend) {
  @if $legacy-support-for-ie6 and $legacy-support-for-ie7 and not $legacy-support-for-mozilla {
    @if $extend {
      @extend %clearfix-micro;
    }
    @else {
      /* for IE 6/7 */
      *zoom: expression(this.runtimeStyle.zoom="1", this.appendChild(document.createElement("br")).style.cssText="clear:both;font:0/0 serif");
      /* non-JS fallback */
      *zoom: 1;

      &:before,
      &:after {
        content: "";
        display: table;
      }

      &:after {
        clear: both;
      }
    }
  }
  @else if $legacy-support-for-ie6 and $legacy-support-for-ie7 and $legacy-support-for-mozilla {
    @if $extend {
      @extend %clearfix-legacy;
    }
    @else {
      /* for IE 6/7 */
      *zoom: expression(this.runtimeStyle.zoom="1", this.appendChild(document.createElement("br")).style.cssText="clear:both;font:0/0 serif");
      /* non-JS fallback */
      *zoom: 1;

      &:before,
      &:after {
        content: ".";
        display: block;
        height: 0;
        overflow: hidden;
      }

      &:after {
        clear: both;
      }
    }
  }
  @else {
    @if $extend {
      @extend %clearfix
    }
    @else {
      &:after {
        content: "";
        display: table;
        clear: both;
      }
    }
  }
}